<?php
if (!defined("__WD__")) exit("Wrong Connect");

// 이파일은 굉장히 중요한 파일이므로, 삭제하면 안됩니다.

/**

만약,  __Router를 Controller로 사용하고자 할때는 다음 소스를 사용하세요.
주소의 최소화를 사용하고자 할때만 사용가능합니다. :)

**

class __Router extends __Controller {
	function __construct() {
		parent::__construct();

	}
	
	function doit($url_item) {
	
	}
}


// -- 끝 ** */


/**

만약,  __Router를 Router로만 사용할때는 그대로 사용가능합니다.위 소스를 활성화 하고자 할땐 **뒤에 슬래쉬 하나를 추가하면 됩니다.
마찬가지로 아래에서는 슬래쉬만 제거하면 자동으로 주석처리 됩니다.

**/

class __Router {

	// 처음 실행 때 redirect되는 주소.
	private $base_file = "blog";
	
	private $base_func = "index";
	
	private $prefix_controller = "";


	function doit($url_item) {

		//$url_item = func_get_args();
		
		// 주소가 없을때 redirect.
		if ( $url_item[0] == "." ) go("http://".SELF."/".$this->base_file);

		// 컨트롤러 처리..
		$path_item = array();

		do {
			if ( count($url_item) == 0 ) throw new Error("해당 주소의 Controller파일이 존재하지 않습니다.");

			$controller_name = array_shift($url_item);
			array_push($path_item, $controller_name);
			
			$path = implode("/", $path_item);

		} while(!file_exists(__APP__."/controller/{$path}.php"));
	
		include __APP__."/controller/{$path}.php";
	
		$controller_name = $this->prefix_controller.caseChange("underbar", "pascal", $controller_name);
		
		if ( !class_exists($controller_name) ) throw new Error($controller_name." Controller를 찾을 수 없습니다.");

		$oController =& getInstance( $controller_name );
		
		unset($controller_name, $path);


		$default_item = $url_item;

		if (method_exists($oController, "__remap")) {
			call_user_func_array(array($oController, "__remap"), $default_item);
		}
		else {

			if ( count($url_item) == 0 ) array_push($url_item, $this->base_func);
	
			$function_name = array_shift($url_item);
	
			if ( method_exists($oController, $function_name) ) {
			
				if ( $function_name[0] == "_") throw new Error("해당 주소의 페이지는 비공개페이지입니다.");
	
				call_user_func_array(array($oController, $function_name), $url_item);

				unset($function_name);
			}
			else if (method_exists($oController, "__default")){
				call_user_func_array(array($oController, "__default"), $default_item);
			}
			else {
				throw new Error("해당 주소의 Method가 존재하지 않습니다.");
			}
		}
		
		unset($url_item, $path_item);

		if (method_exists($oController, "__finish")) {
			$buffer = ob_get_clean();
			$oController -> __finish($buffer);
		}
		
	}
	
}


// -- 끝 ** */


